<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>O B&aacute;sico de Zend_Controller - Zend Framework Manual</title>

    <link href="../css/shCore.css" rel="stylesheet" type="text/css" />
    <link href="../css/shThemeDefault.css" rel="stylesheet" type="text/css" />
    <link href="../css/styles.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Zend Framework</h1>
<h2>Programmer's Reference Guide</h2>
<ul>
    <li><a href="../en/zend.controller.basics.html">Inglês (English)</a></li>
    <li><a href="../pt-br/zend.controller.basics.html">Português Brasileiro (Brazilian Portuguese)</a></li>
</ul>
<table width="100%">
    <tr valign="top">
        <td width="85%">
            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.controller.quickstart.html">Guia de In&iacute;cio R&aacute;pido do Zend_Controller</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.controller.html">Zend_Controller</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.controller.front.html">The Front Controller</a></div>
                    </td>
                </tr>
            </table>
<hr />
<div id="zend.controller.basics" class="section"><div class="info"><h1 class="title">O Básico de Zend_Controller</h1></div>
    

    <p class="para">
        O sistema <span class="classname">Zend_Controller</span> é projetado para ser leve, modular, e
        extensível. É um projeto minimalista para permitir uma flexibilidade e alguma liberdade
        para usuários enquanto provê estrutura suficiente para os sistemas construídos envolta
        do <span class="classname">Zend_Controller</span> compartilhar algumas convenções
        comuns e layout de código.
    </p>

    <p class="para">
        O diagrama seguinte representa o processo, e a narrativa subseqüente descreve
        detalhadamente as interações:
    </p>

    <p class="para">
        <div class="inlinemediaobject"><div class="imageobject"><a href="images/d481d625821a97b9a5eb2cec99dca50e-zend.controller.basics.png"><img src="images/d481d625821a97b9a5eb2cec99dca50e-zend.controller.basics.png" alt="zend.controller.basics.png" width="450" height="525" /></a></div></div>
    </p>

    <p class="para">
        O processo do <span class="classname">Zend_Controller</span> é implementado por vários
        componentes. Enquanto não é necessário entender completamente os por menores de todos
        estes componentes do sistema, ter um conhecimento básico do processo é útil.
    </p>

    <ul class="itemizedlist">
        <li class="listitem">
            <p class="para">
                <span class="classname">Zend_Controller_Front</span> orquestra todo o processo do
                sistema <span class="classname">Zend_Controller</span>. Ele é o interpretador do
                padrão FrontController. <span class="classname">Zend_Controller_Front</span> processa
                todas as requisições recebidas pelo servidor e é o responsável direto pela
                delegação dos pedidos dos ActionControllers
                (<span class="classname">Zend_Controller_Action</span>).
            </p>
        </li>

        <li class="listitem">
            <p class="para">
                <span class="classname">Zend_Controller_Request_Abstract</span> (muitas vezes chamado
                de <em class="emphasis">Request Object</em>) representa o ambiente de pedido e
                fornece métodos para colocação e recuperação do controlador e nomes de ações
                e qualquer parâmetros passados. Adicionalmente ele guarda o registro de que a
                ação foi despachada ou não pelo
                <span class="classname">Zend_Controller_Dispatcher</span>. Extensões do objeto de
                requisição abstrata podem ser usadas para encapsular todo o ambiente de
                requisição, permitindo aos roteadores colocarem informações no ambiente de
                requisição para estabelecer o controlador e nomes de ação.
            </p>

            <p class="para">
                Por padrão, <span class="classname">Zend_Controller_Request_Http</span> é usado, para
                fornecer acesso a todo o ambiente de pedido de <acronym class="acronym">HTTP</acronym>.
            </p>
        </li>

        <li class="listitem">
            <p class="para">
                <span class="classname">Zend_Controller_Router_Interface</span> é usado para definir
                os roteadores. Roteamento é o processo de examinação da requisição do ambiente
                para determinar qual controlador e ação do controlador, devem receber a
                requisição. Este controlador, ação e parâmetros opcionais são incluídos no
                objeto de requisição para serem processados pelo
                <span class="classname">Zend_Controller_Dispatcher_Standard</span>. O roteamento
                ocorre somente uma vez: quando a requisição é inicialmente recebida e antes
                do primeiro controlador ser despachado.
            </p>

            <p class="para">
                O roteador padrão, <span class="classname">Zend_Controller_Router_Rewrite</span>, pega
                uma <acronym class="acronym">URI</acronym> no ponto especificado em
                <span class="classname">Zend_Controller_Request_Http</span> e a decompõe em um
                controlador, ação e parâmetros baseado na informação do caminho da
                <acronym class="acronym">URL</acronym>. Por exemplo, a <acronym class="acronym">URL</acronym>
                <var class="filename">http://localhost/foo/bar/key/value</var> pode ser decomposta
                para usar o controlador <em class="emphasis">foo</em>, a ação
                <em class="emphasis">bar</em>, e o parâmetro especificado <em class="emphasis">key</em>
                com o valor igual a <em class="emphasis">value</em>.
            </p>

            <p class="para">
                <span class="classname">Zend_Controller_Router_Rewrite</span> também pode ser usado
                para combinar caminhos arbitrários; veja a <a href="zend.controller.router.html" class="link">documentação do roteador</a>
                para mais informações.
            </p>
        </li>

        <li class="listitem">
            <p class="para">
                <span class="classname">Zend_Controller_Dispatcher_Interface</span> é usado para
                definir despachantes. Despachar é o processo de pegar o controlador e a ação
                do objeto de requisição e mapeá-lo para um arquivo de um controlador (ou
                classe) e método de ação na classe do controlador. Se o controlador ou ação
                não existir, ele determina o controlador e ação padrão para despachar.
            </p>

            <p class="para">
                O processo atual de despacho consiste em instanciar a classe do controlador e
                chamar o método de ação nesta classe. Diferente do roteamento, que ocorre
                somente uma vez, o despacho ocorre em um laço. Se o status do objeto de
                requisição despachado é reiniciado em algum ponto, o laço irá se repetir,
                chamando qualquer ação atualmente estabelecida no objeto de requisição. A
                primeira vez que o laço do objeto de requisição terminar com o status ativado
                (<span class="type">Boolean</span> <b><tt>TRUE</tt></b>), ele irá finalizar
                o processo.
            </p>

            <p class="para">
                O despachador padrão é o
                <span class="classname">Zend_Controller_Dispatcher_Standard</span>. Ele define os
                controladores como MixedCasedClasses terminados com a palavra Controller, e os
                métodos de ações como camelCasedMethods terminadas com a palavra Action:
                 <span class="methodname">FooController::barAction()</span>. Neste caso, o controlador
                será chamado como <em class="emphasis">foo</em> e a ação como
                <em class="emphasis">bar</em>.
            </p>

            <blockquote class="note"><p><b class="note">Note</b>: <span class="info"><b>Convenções de Nomenclatura para Maiúsculas e Minúsculas</b><br /></span>
                

                <p class="para">
                    Desde que os seres humanos são notoriamente incapazes de preservar
                    maiúsculas e minúsculas ao digitar links, o Zend Framework atualmente
                    normaliza as informações sobre o caminho para minúsculas. Isto,
                    naturalmente, afetará a forma como você nomeia o seu controlador e suas
                    ações... ou referir-se a eles em links.
                </p>

                <p class="para">
                    Se você deseja que o nome de seu controlador de classe ou do método de ação
                    tenham múltiplas MixedCasedWords ou camelCasedWords, você precisará, para
                    separar as palavras na url, um &#039;-&#039; ou &#039;.&#039; (embora você pode configurar o
                    caractere utilizado).
                </p>

                <p class="para">
                    Por exemplo, se você estava indo para a ação em
                     <span class="methodname">FooBarController::bazBatAction()</span>, você irá se
                    referir a ela em uma url como <var class="filename">/foo-bar/baz-bat</var> ou
                    <var class="filename">/foo.bar/baz.bat</var>.
                </p>
            </p></blockquote>
        </li>

        <li class="listitem">
            <p class="para">
                <span class="classname">Zend_Controller_Action</span> é o componente base do
                controlador de ação. Cada controlador é uma classe única que extende a classe
                <span class="classname">Zend_Controller_Action</span> e deve conter um ou
                mais métodos de ação.
            </p>
        </li>

        <li class="listitem">
            <p class="para">
                <span class="classname">Zend_Controller_Response_Abstract</span> define a classe básica
                de resposta usada para coletar e retornar repostas dos controladores de ação.
                Ela coleta tanto cabeçalhos como conteúdos de corpo.
            </p>

            <p class="para">
                A classe de resposta padrão é
                <span class="classname">Zend_Controller_Response_Http</span>, que é conveniente para
                uso em um ambiente <acronym class="acronym">HTTP</acronym>.
            </p>
        </li>
    </ul>

    <p class="para">
        O processo do <span class="classname">Zend_Controller</span> é relativamente simples. Uma
        requisição é recebida pelo <span class="classname">Zend_Controller_Front</span>, que por sua vez
        chama <span class="classname">Zend_Controller_Router_Rewrite</span> para determinar qual
        controlador (e ação deste controlador) será chamado.
        <span class="classname">Zend_Controller_Router_Rewrite</span> decompõe o <acronym class="acronym">URI</acronym>
        para poder determinar os nomes do controlador e da ação da requisição.
        <span class="classname">Zend_Controller_Front</span> então entrar em um laço de despacho. Ele
        chama <span class="classname">Zend_Controller_Dispatcher_Standard</span>, passando-lhe a
        requisição, para ser despachada para o controlador e ação especificados na requisição (ou
        usa os padrões). Depois que o controlador termina, o controle retorna para
        <span class="classname">Zend_Controller_Front</span>. Se o controlador indicar outro controlador
        para ser despachado através do reinicio do status de requisição, o laço continua e outro
        despacho é executado. De outra maneira, o processo termina.
    </p>
</div>
        <hr />

            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.controller.quickstart.html">Guia de In&iacute;cio R&aacute;pido do Zend_Controller</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.controller.html">Zend_Controller</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.controller.front.html">The Front Controller</a></div>
                    </td>
                </tr>
            </table>
</td>
        <td style="font-size: smaller;" width="15%"> <style type="text/css">
#leftbar {
	float: left;
	width: 186px;
	padding: 5px;
	font-size: smaller;
}
ul.toc {
	margin: 0px 5px 5px 5px;
	padding: 0px;
}
ul.toc li {
	font-size: 85%;
	margin: 1px 0 1px 1px;
	padding: 1px 0 1px 11px;
	list-style-type: none;
	background-repeat: no-repeat;
	background-position: center left;
}
ul.toc li.header {
	font-size: 115%;
	padding: 5px 0px 5px 11px;
	border-bottom: 1px solid #cccccc;
	margin-bottom: 5px;
}
ul.toc li.active {
	font-weight: bold;
}
ul.toc li a {
	text-decoration: none;
}
ul.toc li a:hover {
	text-decoration: underline;
}
</style>
 <ul class="toc">
  <li class="header home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="reference.html">Refer&ecirc;ncia do Zend Framework</a></li>
  <li class="header up"><a href="zend.controller.html">Zend_Controller</a></li>
  <li><a href="zend.controller.quickstart.html">Guia de In&iacute;cio R&aacute;pido do Zend_Controller</a></li>
  <li class="active"><a href="zend.controller.basics.html">O B&aacute;sico de Zend_Controller</a></li>
  <li><a href="zend.controller.front.html">The Front Controller</a></li>
  <li><a href="zend.controller.request.html">The Request Object</a></li>
  <li><a href="zend.controller.router.html">The Standard Router</a></li>
  <li><a href="zend.controller.dispatcher.html">The Dispatcher</a></li>
  <li><a href="zend.controller.action.html">Action Controllers</a></li>
  <li><a href="zend.controller.actionhelpers.html">Action Helpers</a></li>
  <li><a href="zend.controller.response.html">The Response Object</a></li>
  <li><a href="zend.controller.plugins.html">Plugins</a></li>
  <li><a href="zend.controller.modular.html">Using a Conventional Modular Directory Structure</a></li>
  <li><a href="zend.controller.exceptions.html">MVC Exceptions</a></li>
 </ul>
 </td>
    </tr>
</table>

<script type="text/javascript" src="../js/shCore.js"></script>
<script type="text/javascript" src="../js/shAutoloader.js"></script>
<script type="text/javascript" src="../js/main.js"></script>

</body>
</html>